package com.vq.common;

import com.vq.entity.User;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * <h1>在线用户信息库</h1>
 */
public class UserLibrary {
    static UserLibrary me = new UserLibrary();
    static Random r = new Random();//用于生成随机在线码

    /**
     * 在线用户
     */
    static List<User> onlineUsers = new ArrayList<>();
    /**
     * 用户在线人数
     */
    static Integer numberOfUsersOnline = 0;
    /**
     * 聊天库
     */
    static List<Message> chatList = new ArrayList<>();

    /**
     * 查询在线用户是否存在
     * @param account
     * @return 查找到的用户
     */
    static User getUser(String account) {
        for (int i = 0; i < onlineUsers.size(); i++) {
            if(onlineUsers.get(i).getAccount().equals(account)) {
                return onlineUsers.get(i);
            }
        }
        return null;
    }
    /**
     * 新增在线用户
     * @param user
     * @return
     */
    public static int newUsers(User user) {
        if (user.getAccount()==null) return 0;//用户为空不能新增为在线
        if (getUser(user.getAccount())!=null) disUsers(user);//如果已经有在线的，先挤掉在线用户
        else numberOfUsersOnline++;//在线用户加一
        int onlineNum = r.nextInt(10000)+1;//生成随机在线码
        user.setOnlineNum(onlineNum);//设置在线码
        onlineUsers.add(user);//添加在线用户
        return onlineNum;
    }
    /**
     * 离线用户
     * @param user
     * @return
     */
    public static boolean disUsers(User user) {
        if (user.getAccount()==null) return false;//用户为空不能离线
        if (getUser(user.getAccount())==null) return false;//用户已经为离线状态，不能在离线
        numberOfUsersOnline--;//在线用户减一
        return onlineUsers.remove(user);
    }
    /**
     * 是否在线
     * @return 在线-true 离线-false
     */
    public static User isOnline(String account) {
        return getUser(account);
    }

    /**
     * 发送消息
     * @param message
     * @return
     */
    public static boolean sending(Message message) {
        if (message.getSenderAcc()==null||message.getReceiverAcc()==null) return false;
        return chatList.add(message);
    }
    /**
     * 接收消息
     * @param senderAcc
     * @param receiverAcc
     * @return
     */
    public static Message accept(String senderAcc, String receiverAcc) {
        if (senderAcc==null||receiverAcc==null) return null;
        Message message = null;
        for (int i = 0; i < chatList.size(); i++) {
            //判断发送方为自己好友，接收方为自己
            if (chatList.get(i).getSenderAcc().equals(senderAcc)&&chatList.get(i).getReceiverAcc().equals(receiverAcc)) {
                message = chatList.remove(i);
                break;
            }
        }
        return message;
    }
}
